package cn.com.dcsgo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * 接收路径参数
 *
 * @author Dcsgo
 * @since 2025/3/2 11:39
 */

@Controller
@ResponseBody
@RequestMapping("path")
public class PathController {

    /**
     * 接收路径参数时必须使用@PathVariable注解
     * 不使用注解SpringMVC会认为是请求参数，而不是我们需要的路径参数
     * 请求路径中使用大括号表示一个路程参数，大括号中的字符及是路径参数的名称
     * PathVariable 仅有 三个属性
     * required 是否必填 默认为必填
     * name 和 value 指定要绑定的路径参数
     *
     * @param first  first
     * @param second second
     * @return String
     */
    @GetMapping("{dir1}/{dir2}")
    public String path(@PathVariable(name = "dir1") String first,
                       @PathVariable(name = "dir2", required = false) String second) {
        System.out.println("first = " + first + ", second = " + second);
        return "dir1 = " + first + ", dir2 = " + second;
    }
}

/*
在Spring MVC中，当你访问一个路径时，如果路径模板和实际请求路径不匹配，Spring MVC会返回404错误。
上面的代码中，dir2参数虽然被标记为required = false，但路径模板{dir1}/{dir2}仍然需要两个路径段来匹配。
具体来说，@PathVariable注解的required属性只控制该参数是否必须在请求中提供，
但路径模板本身仍然需要匹配整个路径结构。如果路径模板要求两个路径段（如{dir1}/{dir2}），
而请求路径只提供了第一个路径段（如/path/hhhh），那么路径模板无法匹配，从而导致404错误。
 */
